﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplicationGDI4._1
{
    public partial class Form1 : Form
    {
        Metafile mf = Metafile.FromFile("meta.wmf") as Metafile;

        public Form1()
        {
            InitializeComponent();
        }

        void CreateMetaFile()   // Создаем новый метод
        {
            // Создаем объект класса графиксю но создается нулевой объект не привязанный не к чему.
            // поэтому передаем фромшвнд интерал
            Graphics canv = Graphics.FromHwndInternal(IntPtr.Zero); // создаем нудевой холст для рисования
            IntPtr hDc = canv.GetHdc(); // интптр - указатель на работу с памятью. мы получаем hdc - это хендл девайс контекст (дискриптор устройства). монитор как интерфейс для рисования.
            MemoryStream ms = new MemoryStream();   // создаем поток памяти. (хранилище в памяти виртуальное)
            Metafile img = new Metafile(ms, hDc, EmfType.EmfOnly);  // создаем наш метафайл

            using (Graphics aG = Graphics.FromImage(img))   // берем объекст графикс уже у нашей картинки. 1дискриптор контекста устройства. взяли абстрактный холст. на его основе создали чистый метафайл и у чистого метафайла взяли графикс на котором уже можем рисовать.
            {
                Pen p = new Pen(Color.DarkRed);
                p.Width = 3;                
                aG.DrawLine(p, new Point(10, 30), new Point(120, 90));
            }

            canv.ReleaseHdc();  // мы возвращаем холст системе. иначе там что-то с памятью забитой будеьт
            img.Save("metaTmp.wmf");    // вызываем метод сохранения
            FileStream write = new FileStream("meta.wmf", FileMode.Create); // переписываем еще один метафайл с помощью потока
            ms.WriteTo(write);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //CreateMetaFile();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImageUnscaled(mf, 0, 0);
        }
    }
}


/*
 * Работа с метафайлом
 * метафайл это векторный файл
*/